﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE;
using Insifo.BE.Seg;
using Insifo.BE.Gen;

namespace Insifo.DL.Seg
{
    public class DLUsuarioMenu : DLTransaction, IDLTransaccion<BEUsuarioMenu>
    {
        #region  Members


        /// <summary>
        /// Método obtiene obtiene la Lista de usuarios del Menu
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar(BEMenu pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_UsuarioMenu_Listar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdMenu", DbType.Int32, pbe.IdMenu);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;

        }

        /// <summary>
        /// Método obtiene los Menus por Nivel
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarPorNivel(BEUsuarioMenu pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_UsuarioMenu_Listar_X_Nivel");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@ai_IdMenu", DbType.Int32, pbe.IdMenu);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoUsuario", DbType.String, pbe.CodigoUsuario);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;
        }

        /// <summary>
        /// Método obtiene los Menus por Nivel
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public List<BEUsuarioMenu> ListarPorNivelPorUsuario(BEUsuarioMenu pbe)
        {
            BEUsuarioMenu be = new BEUsuarioMenu();
            List<BEUsuarioMenu> mList = new List<BEUsuarioMenu>();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_UsuarioMenu_Listar_X_Nivel");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@ai_IdMenu", DbType.Int32, pbe.IdMenu);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoUsuario", DbType.String, pbe.CodigoUsuario);
                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be = new BEUsuarioMenu();
                        be.IdMenu = DBValue.Get<Int32>(reader, "IdMenu");
                        be.IdAplicacion = DBValue.Get<Int32>(reader, "IdAplicacion");
                        be.Descripcion = DBValue.Get<String>(reader, "Descripcion");
                        be.Orden = DBValue.Get<String>(reader, "Orden");
                        be.TipoControl = DBValue.Get<String>(reader, "TipoControl");
                        be.Seleccion = DBValue.Get<Int32>(reader, "Seleccion");
                        be.CantidadMenu = DBValue.Get<Int32>(reader, "CantidadMenu");
                        be.Estado = DBValue.Get<String>(reader, "Estado");
                        mList.Add(be);
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return mList;
        }

        /// <summary>
        /// Método Inserta un usuario de la aplicación
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEUsuarioMenu Insertar(BEUsuarioMenu pbe)
        {
            BEUsuarioMenu be = new BEUsuarioMenu();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_UsuarioMenu_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdMenu", DbType.Int32, pbe.IdMenu);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoUsuario", DbType.String, pbe.CodigoUsuario);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdMenu = DBValue.Get<Int32>(reader, "IdMenu");
                        be.CodigoUsuario = DBValue.Get<String>(reader, "CodigoUsuario");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");

                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        public BEUsuarioMenu InsertarAccion(BEAccion pbe)
        {
            BEUsuarioMenu be = new BEUsuarioMenu();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_UsuarioMenu_Acciones_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdMenu", DbType.Int32, pbe.IdMenu);
                sqlDB.AddInParameter(dbCmd, "@ai_IdAccion", DbType.String, pbe.IdAccion);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoUsuario", DbType.String, pbe.UsuarioCreacion);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoAccion", DbType.String, pbe.CodigoAccion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdMenu = DBValue.Get<Int32>(reader, "IdMenu");
                        be.CodigoUsuario = DBValue.Get<String>(reader, "CodigoUsuario");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");

                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        #endregion  Members
    }
}
